﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MJM.CONCURSO.EN;
using MJM.CONCURSO.AD;

namespace MJM.CONCURSO.CN
{
    public static class ConcursoCN
    {
        private static Int64 ValorFecha()
        {
            string hora = (DateTime.Now.Hour + 100).ToString().Substring(1, 2) + (DateTime.Now.Minute + 100).ToString().Substring(1, 2);
            return Convert.ToInt64(ConvertFechaNum().ToString()+hora);
        }

        private static int ConvertFechaNum()
        {
            return DateTime.Now.Year * 10000 + DateTime.Now.Month * 100 + DateTime.Now.Day;
        }

        private static string FechaFormato(string fecha)
        {
            return fecha.Substring(6, 2) + "/" + fecha.Substring(4, 2) + "/" + fecha.Substring(0, 4);
        }

        private static int ConvertHoraNum(string hora)
        {
            string[] str = hora.Split(':');
            return Convert.ToInt32(str[0]) * 100 + Convert.ToInt32(str[1]);
        }

        public static int Insertar(ConcursoEN obj)
        {
            obj.Existe = 2;
            return ConcursoAD.Insertar(obj);
        }

        public static int Activar(ConcursoEN obj)
        {
            obj.Existe = 1;
            return ConcursoAD.ActualizaEstado(obj);
        }

        public static int Eliminar(ConcursoEN obj)
        {
            obj.Existe = 0;
            return ConcursoAD.ActualizaEstado(obj);
        }

        public static ConcursoEN ObtenerConcursoActivo()
        {
            ConcursoEN obj = new ConcursoEN();
            obj.Existe = 1;
            List<ConcursoEN> lst = ConcursoAD.Listar(obj);
            for (int i = 0; i < lst.Count; i++)
            {
                if (lst[i].HoraFin.Length == 5 && lst[i].HoraSorteo.Length == 5 && lst[i].HoraInicio.Length == 5)
                {
                    Int64 fin = Convert.ToInt64(lst[i].FechaFin + lst[i].HoraFin.Substring(0, 2) + lst[i].HoraFin.Substring(3, 2));
                    Int64 inicio = Convert.ToInt64(lst[i].FechaInicio + lst[i].HoraInicio.Substring(0, 2) + lst[i].HoraInicio.Substring(3, 2));
                    Int64 Ahora = ValorFecha();
                    if (inicio<=Ahora && fin>=Ahora)
                    {
                        lst[i].FechaFin = FechaFormato(lst[i].FechaFin);
                        lst[i].FechaInicio = FechaFormato(lst[i].FechaInicio);
                        lst[i].FechaSorteo = FechaFormato(lst[i].FechaSorteo);
                        return lst[i];
                    }
                }
            }
            return null;
        }

        public static ConcursoEN ObtenerConcursoActivoParaSorteo()
        {
            ConcursoEN obj = new ConcursoEN();
            obj.Existe = 1;
            List<ConcursoEN> lst = ConcursoAD.Listar(obj);
            for (int i = 0; i < lst.Count; i++)
            {               
                if (lst[i].HoraFin.Length == 5 && lst[i].HoraSorteo.Length == 5 && lst[i].HoraInicio.Length == 5)
                {
                    Int64 fin = Convert.ToInt64(lst[i].FechaFin + lst[i].HoraFin.Substring(0, 2) + lst[i].HoraFin.Substring(3, 2));
                    Int64 inicio = Convert.ToInt64(lst[i].FechaInicio + lst[i].HoraInicio.Substring(0, 2) + lst[i].HoraInicio.Substring(3, 2));
                    Int64 sorteo = Convert.ToInt64(lst[i].FechaSorteo + lst[i].HoraSorteo.Substring(0, 2) + lst[i].HoraSorteo.Substring(3, 2));
                    Int64 Ahora = ValorFecha();
                    if ((inicio<=Ahora && fin>=Ahora) || (fin<Ahora && Ahora<sorteo))
                    {
                        lst[i].FechaFin = FechaFormato(lst[i].FechaFin);
                        lst[i].FechaInicio = FechaFormato(lst[i].FechaInicio);
                        lst[i].FechaSorteo = FechaFormato(lst[i].FechaSorteo);
                        return lst[i];
                    }
                }
            }
            return null;
        }

        public static bool SePuedeSortear(ConcursoEN obj)
        {
            try
            {
                obj.Existe = 1;
                List<ConcursoEN> lst = ConcursoAD.Listar(obj);
                for (int i = 0; i < lst.Count; i++)
                {
                    if (lst[i].HoraFin.Length == 5 && lst[i].HoraSorteo.Length == 5 && lst[i].HoraInicio.Length == 5)
                    {
                        Int64 fin = Convert.ToInt64(lst[i].FechaFin + lst[i].HoraFin.Substring(0, 2) + lst[i].HoraFin.Substring(3, 2));
                        Int64 sorteo = Convert.ToInt64(lst[i].FechaSorteo + lst[i].HoraSorteo.Substring(0, 2) + lst[i].HoraSorteo.Substring(3, 2));
                        Int64 Ahora = ValorFecha();
                        if (lst[i].ID == obj.ID)
                            if (fin < Ahora && Ahora < sorteo)
                            {
                                return true;
                            }
                    }
                }
            }
            catch(Exception ex)
            { 
            
            }
            return false;
        }

        public static ConcursoEN ObtenerConcursoID(int ID)
        {
            ConcursoEN obj = new ConcursoEN();
            obj.Existe = 1;
            List<ConcursoEN> lst = ConcursoAD.Listar(obj);
            for (int i = 0; i < lst.Count; i++)
            {
                if (lst[i].ID == ID)
                {
                    lst[i].FechaFin = FechaFormato(lst[i].FechaFin);
                    lst[i].FechaInicio = FechaFormato(lst[i].FechaInicio);
                    lst[i].FechaSorteo = FechaFormato(lst[i].FechaSorteo);
                    return lst[i];
                }
            }
            return null;
        }

        public static bool ExisteConcurso()
        {
            ConcursoEN obj = new ConcursoEN();
            obj.Existe = 1;
            List<ConcursoEN> lst = ConcursoAD.Listar(obj);
            for (int i = 0; i < lst.Count; i++)
            {
                if (Convert.ToInt32(lst[i].FechaSorteo) > ConvertFechaNum() || (Convert.ToInt32(lst[i].FechaSorteo) == ConvertFechaNum() && ConvertHoraNum(lst[i].HoraSorteo) >= (DateTime.Now.Hour * 100 + DateTime.Now.Minute)))
                {
                    return true;
                }
            }
            return false;
        }
    }
}
